const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');
const path = require('path');
require('dotenv').config();

const app = express();
const PORT = process.env.PORT || 3010;

// CORS配置
const corsOptions = {
  origin: '*', // 允许的域名
  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'], // 允许的方法
  allowedHeaders: ['Content-Type', 'Authorization'], // 允许的请求头
  credentials: true // 允许携带凭证
};

// 中间件
app.use(cors(corsOptions));
app.use(express.json());
app.use(express.static('.'));

// 创建数据库连接（不指定数据库，先连接到服务器）
const db = mysql.createConnection({
    host: process.env.DB_HOST,
    port: process.env.DB_PORT || 3306,
    user: process.env.DB_USER,
    password: process.env.DB_PASSWORD
    // 注意：这里不指定数据库，因为数据库名包含连字符需要特殊处理
});

// 连接数据库
db.connect((err) => {
    if (err) {
        console.error('数据库连接失败:', err);
        return;
    }
    console.log('成功连接到MySQL服务器');
    
    // 创建数据库（如果不存在），使用反引号包围包含连字符的数据库名
    db.query('CREATE DATABASE IF NOT EXISTS `slow_day`', (err) => {
        if (err) {
            console.error('创建数据库失败:', err);
            return;
        }
        
        // 使用数据库，同样使用反引号包围
        db.changeUser({database: 'slow_day'}, (err) => {
            if (err) {
                console.error('切换数据库失败:', err);
                return;
            }
            console.log('成功连接到slow_day数据库');
            
            // 创建用户数据表
            const createTableQuery = `
                CREATE TABLE IF NOT EXISTS user_data (
                    id INT AUTO_INCREMENT PRIMARY KEY,
                    username VARCHAR(255) UNIQUE NOT NULL,
                    user_info JSON,
                    events JSON,
                    records JSON,
                    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
                    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                )
            `;
            
            db.query(createTableQuery, (err) => {
                if (err) {
                    console.error('创建表失败:', err);
                    return;
                }
                console.log('用户数据表已创建或已存在');
            });
        });
    });
});

// 获取用户数据
app.get('/api/user/:username', (req, res) => {
    const username = req.params.username;
    console.log('请求获取用户数据，用户名:', username);
    
    const query = 'SELECT user_info, events, records FROM user_data WHERE username = ?';
    db.query(query, [username], (err, results) => {
        if (err) {
            console.error('查询用户数据失败:', err);
            return res.status(500).json({ error: '查询用户数据失败' });
        }
        
        console.log('查询结果:', results);
        
        if (results.length === 0) {
            // 用户不存在，返回默认数据结构
            console.log('用户不存在，返回默认数据结构');
            return res.json({
                info: {},
                events: {},
                records: {}
            });
        }
        
        // 返回用户数据
        const userData = {
            info: results[0].user_info || {},
            events: results[0].events || {},
            records: results[0].records || {}
        };
        
        console.log('返回用户数据:', userData);
        res.json(userData);
    });
});

// 保存用户数据
app.post('/api/user/:username', (req, res) => {
    const username = req.params.username;
    const { info, events, records } = req.body;
    
    console.log('保存用户数据请求，用户名:', username);
    console.log('接收到的数据:', { info, events, records });
    
    // 检查用户是否存在
    const checkQuery = 'SELECT id FROM user_data WHERE username = ?';
    db.query(checkQuery, [username], (err, results) => {
        if (err) {
            console.error('检查用户失败:', err);
            return res.status(500).json({ error: '保存用户数据失败' });
        }
        
        console.log('检查用户结果:', results);
        
        if (results.length === 0) {
            // 用户不存在，插入新用户
            const insertQuery = `
                INSERT INTO user_data (username, user_info, events, records)
                VALUES (?, ?, ?, ?)
            `;
            db.query(insertQuery, [username, JSON.stringify(info), JSON.stringify(events), JSON.stringify(records)], (err) => {
                if (err) {
                    console.error('创建用户失败:', err);
                    return res.status(500).json({ error: '创建用户失败' });
                }
                console.log('用户创建成功');
                res.json({ success: true });
            });
        } else {
            // 用户存在，更新数据
            const updateQuery = `
                UPDATE user_data
                SET user_info = ?, events = ?, records = ?
                WHERE username = ?
            `;
            db.query(updateQuery, [JSON.stringify(info), JSON.stringify(events), JSON.stringify(records), username], (err) => {
                if (err) {
                    console.error('更新用户数据失败:', err);
                    return res.status(500).json({ error: '更新用户数据失败' });
                }
                console.log('用户数据更新成功');
                res.json({ success: true });
            });
        }
    });
});

// 获取所有用户（可选功能）
app.get('/api/users', (req, res) => {
    const query = 'SELECT username FROM user_data';
    db.query(query, (err, results) => {
        if (err) {
            console.error('查询用户列表失败:', err);
            return res.status(500).json({ error: '查询用户列表失败' });
        }
        
        const users = results.map(row => row.username);
        res.json(users);
    });
});

app.listen(PORT, () => {
    console.log(`服务器运行在 http://127.0.0.1:${PORT}`);
});